#include "chat_room.h"

int main(int argc, char const *argv[])
{
    if(argc!=3){
        printf("User:%s<ip><port>\n",argv[0]);
        exit(-1);
    }

    int sockfd=-1;
    struct sockaddr_in servaddr;
    socklen_t addrlen=sizeof(servaddr);

    if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){
        ERRLOG("socket error");
    }    

    memset(&servaddr,0,addrlen);
    servaddr.sin_family=AF_INET;
    servaddr.sin_addr.s_addr=inet_addr(argv[1]);
    servaddr.sin_port=htons(atoi(argv[2]));

    MSG msg;
    memset(&msg,0,sizeof(msg));
    
    while(1){
        msg.code=1;

        printf("请输入用户名:");
        fgets(msg.name,sizeof(msg.name),stdin);
        msg.name[strlen(msg.name)-1]='\0';

        if(sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr*)&servaddr,addrlen)==-1){
            ERRLOG("sendro error");
        }

        if(recvfrom(sockfd,&msg,sizeof(msg),0,NULL,NULL)==-1){
            ERRLOG("recvfrom error");
        }

        printf("%s\n",msg.text);
        if(msg.code==1){
            break;
        }
    }

    pid_t pid=fork();
    if(pid==-1){
        ERRLOG("fork error");
    }

    if(pid>0){
        while(1){
            fgets(msg.text,sizeof(msg.text),stdin);
            msg.text[strlen(msg.text)-1]='\0';

            if(strcmp(msg.text,"quit")==0){
                msg.code=3;
                if(sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr*)&servaddr,addrlen)==-1){
                    ERRLOG("sendto error");
                }
                kill(pid,SIGKILL);
                exit(0);
            }else if(strncmp("private to ",msg.text,strlen("private to "))==0){
                msg.code=4;
            }else{
                msg.code=2;
            }

            if(sendto(sockfd,&msg,sizeof(msg),0,(struct sockaddr*)&servaddr,addrlen)==-1){
                ERRLOG("sendto error");
            }
        }
    }else{
        while(1){
            if(recvfrom(sockfd,&msg,sizeof(msg),0,NULL,NULL)==-1){
                ERRLOG("recvfrom error");
            }
            if(msg.code==4){
                print("%s%s\n",msg.name,msg.text);
                fflush(stdout);
            }else{
                printf("%s\n",msg.text);
            }
        }
    }
    return 0;
}
